﻿if exists (select name from sysobjects where name ='spu_xacnhansanpham')
	drop proc spu_xacnhansanpham
go

create proc spu_xacnhansanpham(@IDNguoiDungSanPham int,@IDSanPham int,@IDNguoiDung int,@IsPhanThuong int)
as
	begin tran
	set tran isolation level SERIALIZABLE;
	declare @IDSanPhamXacNhan int,@ID int,@TongDiemThuong int
	select @IDSanPhamXacNhan=ID from SanPham with(UPDLOCK) where ID=@IDSanPham and ThoiGianBatDauNhanHang<=GETDATE() and ThoiGianKetThucNhanHang>=GETDATE()
	select @ID=ID,@TongDiemThuong=TongDiemThuong from NguoiDung_SanPham with(UPDLOCK) where ID=@IDNguoiDungSanPham and IDTrangThaiSanPham=1
	if(@IDSanPhamXacNhan is null)
	begin
		raiserror(N'Không thể xác nhận vì thời gian không nằm trong thời gian nhận hàng',16,1)
		rollback tran
		return
	end
	if(@ID is null)
	begin
		raiserror(N'Không thể xác nhận vì sản phẩm đã được giao',16,1)
		rollback tran
		return
	end
	update NguoiDung_SanPham set IDTrangThaiSanPham=4 where ID=@IDNguoiDungSanPham
	if(@IsPhanThuong=0)
	begin
		update NguoiDung set DiemThuong=DiemThuong+@TongDiemThuong where ID=@IDNguoiDung
	end
	if(@@ERROR<>0)
	begin
		raiserror(N'Đã có lỗi trong quá trình xác nhận sản phẩm',16,1)
		rollback tran
		return
	end
	commit tran
go